<?php
/**
 * 数据表验证器
 * @author maniac
 */
namespace app\common\validate;

use app\common\model\Tables AS TablesModel;

class Tables extends Base
{
    // 验证规则
    protected $rule = [
        'tbname' => 'require|validVar|unique',
        'name'   => 'require',
        'id'     => 'containSub',
    ];
    
    // 错误消息
    protected $message = [
        'tbname.require'  => '请输入数据表标识',
        'tbname.validVar' => '请输入合法的数据表标识',
        'tbname.unique'   => '数据表已存在',
        'name.require'    => '请输入数据表名称',
        'id'              => '请先删除数据表下的系统模型',
    ];
    
    // 验证场景
    protected $scene = [
        'add' => ['tbname', 'name'],
        'del' => ['id'],
    ];
    
    /**
     * 验证字段值唯一性
     * @param  string $value 字段值
     * @param  string $rule  验证规则
     * @param  array  $data  所有数据
     * @param  string $key   字段名
     */
    public function unique($value, $rule, $data, $key)
    {
        if (isset($data['id']) && $data['id']) {
            $info = TablesModel::where('id', $data['id'])->find();
            if ($value == $info['tbname']) return true;
        }
        if (in_array(config('database.prefix').$value, get_tables())) {
            return false;
        }
        return true;
    }
}
